1.7 协议层次与服务模型
我们采用 分层 的方法完成计算机复杂功能的实现。具体而言,我们将网络复杂的功能分层为明确的 层次,每一层实现一个或一组功能。
在这样的一个层次结构中,每一层通过 协议 以在 对等层 的实体中交换信息,通过协议规定的动作实现本层的功能,以通过 层间接口 向上层提供 服务。与此同时,每一层也需要调用下层的服务来实现本层的功能。
由此可见,每一层都通过协议实现本层实体间的交互;与调用下层提供的服务实现新功能,并以此向上层提供服务。每一层可以的功能既包括下层可以实现的所有功能,又包含本层实现的新功能。
为了更好地对服务的概念进行说明,我们引入一些术语:
- 服务用户(Service User) 与 服务提供者(Service Provider):指的是调用服务的一方与被调用的一方。
- 原语(Primitive):高层使用下层服务与下层服务上层所用的交互形式。
- 服务访问点(Service Access Point,SAP):上层使用下层服务时所通过的 层间接口。服务访问点是下层用于区分上层用户的方法。
服务分为面向连接的服务与无连接的服务,在传输层会详细讲解。
服务与协议既有区别又有联系:
- 服务是一种 垂直的关系,指的是底层实体向上层实体提供的,可以在本层实体之间相互通信的能力。
- 协议是一种 水平的关系,规定了对等层实体在相互通信的过程中需要遵循的规则的结合。
- 本层协议与功能都需要依靠下层提供的服务来实现。
- 本层的实体通过协议为上层提供更高级的服务。
数据在层间进行传递时,各层处于不同的需要会对数据做处理:
上层的实体为了与其他实体进行通信,会产生 服务数据单元(Server Data Unit,SDU),通过 SAP 传送到当层。当层在 SDU 的基础上添加上自己的 接口控制信息(Interface Control Information,ICI),从而得到了本层的 协议数据单元(Protocol Data Unit,PDU)。协议数据单元指的是在同一协议层之间交换的数据单元。本层得到 PDU 后,再通过本层到下层的 SAP 传给下一层。下一层仿照上述做法对数据做处理,各层做类似的事情后最终数据传送到物理层由物理层进行物理意义上的数据传输。
当然,某一层传下来的 SDU 可能过大或过小,本层可能会依据协议将数据单元切成多个小块或多个小块拼成大块后发送。
总而言之,各层对数据单元的处理如下图所示:

实际的计算机网络各层对数据单元的称呼不同:
- 应用层:报文(Message)
- 传输层:报文段(Message Segment,简称段)
- 网络层:数据报(Datagram)
- 链路层:帧(Frame)
- 物理层:位(bit)
接下来我们来详细介绍一下互联网的 协议栈(Protocol Stack):
| 层次名 | 功能 | 典型协议 |
|---|---|---|
| 应用层 | 网络应用 | HTTP、SMTP、FTP、DNS |
| 传输层 | 主机之中,进程之间的数据传输 | TCP、UDP |
| 网络层 | 主机之间的数据传输 | IP、路由协议 |
| 链路层 | 相邻网络节点之间的数据传输 | PPP、WiFi、以太网 |
| 物理层 | 在链路上传输 bit | - |
至此,我们可以刻画出计算机网络通信时具体发生了什么了:
- 源主机应用产生数据,通过 SAP 由应用层将数据层层向下传递。每一层传递过程中,该层实体都会依据协议向数据添加必要的供目标主机对等层实体识别的首部信息。最终,信息在物理层进行事实上的传递。
- 数据交换节点收到分组数据后,进行两层(交换机)或三层(路由器)的 解封装,每一层提取出需要的首部信息执行功能,再添加上新的首部信息进行 封装 后传递给下层。最终,信息在物理层传递给下一个节点。
- 目标主机收到分组数据后,由物理层将数据层层向上传递。每一层进行解封装,每一层提取出需要的首部信息执行功能后,将信息中的 有效载荷(Payload Field) 传递给上层。最终,数据在目标主机的应用上完成传递。
动画演示这个传递过程:
Todo